package oj.hot100;

public class 移动零 {
    //自己的做法
    public void moveZeroes(int[] nums) {
        int i = 0,j = 0,n = nums.length;
        while(j < n && i < n) {
            while(i < n && nums[i] != 0) {
                i++;
            }
            while(j < n && nums[j] == 0) {
                j++;
            }
            //走到这里,nums[i]为0,nums[j]为非0
            if(i >= n || j >= n) {
                //越界了说明不用换,画一下就知道了
                return;
            }
            if(j > i) {
                //非0元素在后面就交换
                int tmp = nums[i];
                nums[i] = nums[j];
                nums[j] = tmp;
                //不能直接 i = j, 中间可能还有0元素.
                i++;
            }
            j++;
        }
    }
    //老师的做法
    public void moveZeroesTeacher(int[] nums) {
        int dest = -1,cur = 0,n = nums.length;
        while(cur < n) {
            while(cur < n && nums[cur] == 0) {
                cur++;
            }
            if(cur < n) {
                //nums[cur]为非0元素
                dest++;
                int tmp = nums[cur];
                nums[cur] = nums[dest];
                nums[dest] = tmp;
                cur++;
            }
        }
    }
}
